package com.mac.web;

import com.alibaba.fastjson.JSON;
import com.mac.pojo.ResearchResults;
import com.mac.service.ResearchResultsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;

/**
 * 处理研究成果相关操作的Servlet。
 */
@WebServlet("/researchServlet/*")
public class ResearchServlet extends BaseServlet {

    // 定义Logger对象，用于记录日志
    private static final Logger LOGGER = LoggerFactory.getLogger("ResearchServlet.Class");

    // 研究成果服务类，用于与研究成果数据交互
    ResearchResultsService researchResultsService = new ResearchResultsService();

    /**
     * 处理请求，获取所有研究成果。
     * @param request HttpServletRequest对象。
     * @param response HttpServletResponse对象。
     * @throws ServletException 如果发生Servlet异常。
     * @throws IOException 如果发生I/O异常。
     */
    public void selectAllResults(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 初始化列表，用于存储研究成果
        ArrayList<ResearchResults> researchResults;
        try {
            // 调用服务方法，获取所有研究成果
            researchResults = researchResultsService.selectAllResearch();
            LOGGER.info("researchResultsService.selectAllResearch() -> succeed");
        } catch (Exception e) {
            // 记录错误并返回错误消息
            LOGGER.error("researchResultsService.selectAllResearch() -> failed", e);
            response.getWriter().write("SAR_ERROR");
            return;
        }

        // 将研究成果列表转换为JSON格式
        String jsonString = JSON.toJSONString(researchResults);

        // 设置响应内容类型并写入JSON字符串
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }

    /**
     * 处理请求，根据ID获取单个研究成果。
     * @param request HttpServletRequest对象。
     * @param response HttpServletResponse对象。
     * @throws ServletException 如果发生Servlet异常。
     * @throws IOException 如果发生I/O异常。
     */
    public void selectOneByResultId(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 从请求参数中获取成果ID
        String Result_Id = request.getParameter("Result_Id");

        // 将成果ID转换为整数
        int resultId = Integer.parseInt(Result_Id);

        // 初始化研究成果对象，用于存储查询结果
        ResearchResults researchResult;
        try {
            // 调用服务方法，根据ID查询单个研究成果
            researchResult = researchResultsService.selectOneByResultId(resultId);
            LOGGER.info("researchResultsService.selectOneByResultId() -> succeed");
        } catch (Exception e) {
            // 记录错误并返回错误消息
            LOGGER.error("researchResultsService.selectOneByResultId() -> failed", e);
            response.getWriter().write("SAR_ERROR");
            return;
        }

        // 将研究成果转换为JSON格式
        String jsonString = JSON.toJSONString(researchResult);

        // 设置响应内容类型并写入JSON字符串
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }
}